package com.ljy.my_study.leetcode.medium.N叉树的层序遍历;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * @author: li.junying
 * @create: 2022-04-12 15:25
 */
public class TestMain {

//    给定一个 N 叉树，返回其节点值的层序遍历。（即从左到右，逐层遍历）。
//
//    树的序列化输入是用层序遍历，每组子节点都由 null 值分隔（参见示例）。
//
//             
//
//    示例 1：
//
//
//
//    输入：root = [1,null,3,2,4,null,5,6]
//    输出：[[1],[3,2,4],[5,6]]
//    示例 2：
//
//
//
//    输入：root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
//    输出：[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
//             
//
//    提示：
//
//    树的高度不会超过 1000
//    树的节点总数在 [0, 10^4] 之间
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {

    }

    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result=new ArrayList<>();
        if(root==null){
            return result;
        }
        Queue<Node> queue=new LinkedList<>();
        queue.offer(root);
        int size=queue.size();
        while(!queue.isEmpty()){
            List<Integer> list=new ArrayList<>();
            int tmp=0;
            for(int i=0;i<size;i++){
                Node node=queue.poll();
                list.add(node.val);
                for(Node next:node.children){
                    if(next==null){
                        continue;
                    }
                    queue.offer(next);
                    tmp++;
                }
            }
            result.add(list);
            size=tmp;
        }
        return result;
    }

    class Node {
        public int val;
        public List<Node> children;

        public Node() {}

        public Node(int _val) {
            val = _val;
        }

        public Node(int _val, List<Node> _children) {
            val = _val;
            children = _children;
        }
    };
}
